package jrmob.yonyou.com.commonlib.app_config_tool.logger;

/**
 * Created by zhangg on 2017/6/8.
 */

import android.util.Log;

import org.json.JSONObject;

/***
 * 描述: log 工具类
 *
 * @下午10:17:04
 * @author zhangg
 */
public class LogUtils {
    /** 日志输出级别NONE */
    public static final int LEVEL_NONE = 0;

    /** 日志输出级别V */
    public static final int LEVEL_VERBOSE = 1;

    /** 日志输出级别D */
    public static final int LEVEL_DEBUG = 2;

    /** 日志输出级别I */
    public static final int LEVEL_INFO = 3;

    /** 日志输出级别W */
    public static final int LEVEL_WARN = 4;

    /** 日志输出级别E */
    public static final int LEVEL_ERROR = 5;

    /** 日志输出时的TAG */
    public static final String mTag = "mmmm";

    /** 是否允许输出log LEVEL_NONE时候不输出日志 */
    private static int mDebuggable = LEVEL_ERROR;

    /** 用于记时的变量 */
    private static long mTimestamp = 0;

    /** 以级别为 d 的形式输出LOG */
    public static void v(Object msg) {
        if (mDebuggable >= LEVEL_VERBOSE) {
            Logger.v(msg+"");
        }
    }

    /** 以级别为 d 的形式输出LOG */
    public static void d(Object msg) { //(可以list,map等数据类型)
        if (mDebuggable >= LEVEL_DEBUG) {
            Logger.d(msg);
        }
    }

    /** 以级别为 i 的形式输出LOG */
    public static void i(Object msg) {
        if (mDebuggable >= LEVEL_INFO) {
            Logger.i(msg +"");
        }
    }

    /** 以级别为 w 的形式输出LOG */
    public static void w(Object msg) {
        if (mDebuggable >= LEVEL_WARN) {
            Logger.w(msg + "");
        }
    }

    /** 以级别为 w 的形式输出Throwable */
    public static void w(Throwable tr) {
        if (mDebuggable >= LEVEL_WARN) {
            Log.w(mTag, "", tr);
        }
    }

    /** 以级别为 w 的形式输出LOG信息和Throwable */
    public static void w(String msg, Throwable tr) {
        if (mDebuggable >= LEVEL_WARN && null != msg) {
            Log.w(mTag, msg, tr);
            Logger.w(msg);
        }
    }

    /** 以级别为 e 的形式输出LOG */
    public static void e(Object msg) {
        if (mDebuggable >= LEVEL_ERROR) {
            Logger.e(msg+"");
        }
    }

    /** 以级别为 e 的形式输出LOG */
    public static void e(Object tag,Object msg) {
        if (mDebuggable >= LEVEL_ERROR) {
            Logger.e(""+tag+" ---> "+msg+"");
        }
    }


    /**
     * 格式化
     * @param jsonObject
     */
    public static void json(JSONObject jsonObject) {
        Logger.json(jsonObject.toString());
    }


    /**
     * 格式化
     * @param xmlObject
     */
    public static void Xml(Object xmlObject) {
        if (xmlObject != null){
            Logger.xml(xmlObject.toString());
        }else{
            LogUtils.e("xml()参数 xmlObject 参数为null!,请检查!");
        }
    }

    // 更改tag
    public static void  init(String mTag){
        Logger.init(mTag);// 测试环境
    }

    // 设置日志输出基本
    public static void logLevel(LogLevel logLevel){
        Logger.init(mTag).logLevel(logLevel);//正式环境
    }

    /**
     * 格式化
     * @param exception
     * @param msg
     */
    public static void e(Exception exception,Object msg) {
        Logger.e("mmmm",msg);
    }

    /**
     * 格式化
     * @param msg
     */
    public static void dd(Object msg) {
        //Logger.d(msg);
        Logger.d("mmmm",msg);
    }

    /**
     * 格式化
     * @param msg
     */
    public static void ee(Object msg) {
        Logger.e(msg+"");
    }

    /** 以级别为 e 的形式输出Throwable */
    public static void e(Throwable tr) {
        if (mDebuggable >= LEVEL_ERROR) {
            Logger.e(tr, tr.getMessage());
        }
    }

    /** 以级别为 e 的形式输出LOG信息和Throwable */
    public static void e(String msg, Throwable tr) {
        if (mDebuggable >= LEVEL_ERROR && null != msg) {
            Logger.e(tr, msg);
        }
    }

    /** 以级别为 e 的形式输出msg信息,附带时间戳，用于输出一个时间段结束点* @param msg 需要输出的msg */
    public static void elapsed(String msg) {
        long currentTime = System.currentTimeMillis();
        long elapsedTime = currentTime - mTimestamp;
        mTimestamp = currentTime;
        e("[Elapsed：" + elapsedTime + "]" + msg);
    }
}
